﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DTO_MechSys;
using System.Data.SqlClient;
using System.Data;

namespace DAL_MechSys
{
    public class DALCategoria: DALBase
    {

        private DTOCategoria CriarCategoria(SqlDataReader sqlDataReader)
        {
            try
            {
                DTOCategoria dtoCliente = new DTOCategoria();

                if (!string.IsNullOrEmpty(sqlDataReader["CategoriaID"].ToString()))
                {
                    dtoCliente.CategoriaID = (int)sqlDataReader["CategoriaID"];
                }

                if (!string.IsNullOrEmpty(sqlDataReader["Descricao"].ToString()))
                {
                    dtoCliente.Descricao = (string)sqlDataReader["Descricao"];
                }


                return dtoCliente;
            }
            catch (Exception)
            {
                throw;
            }
        }

        public void Inserir(DTOCategoria dtoCategoria)
        {
            try
            {
                string storedProssidere = "sp_InserirCategoria";
                SqlParameter[] parameters =
                
                {                    
                   new SqlParameter("@descricao", dtoCategoria.Descricao),

                };
                ExecuteNonQuery(storedProssidere, parameters);

            }

            catch (SqlException)
            {
                throw;
            }
        }

        public List<DTOCategoria> BuscarCategoriasCadastradas()
        {
            List<DTOCategoria> lstCategorias = new List<DTOCategoria>();

            try
            {
                string storedProssidere = "sp_BuscarCategoriasCadastradas";
                using (SqlDataReader sqlDataReader = ExecuteReader(storedProssidere))
                {
                    while (sqlDataReader.Read())
                    {

                        DTOCategoria dtoCategoria = CriarCategoria(sqlDataReader);

                        lstCategorias.Add(dtoCategoria);

                    }
                }
            }
            catch (SqlException)
            {
                throw;
            }
            return lstCategorias;
        }
        public List<DTOCategoria> PesquisarCategoria(string Descricao, int Codigo)
        {
            List<DTOCategoria> lstCategorias = new List<DTOCategoria>();

            try
            {
                string storedProssidere = "sp_BuscarCategoriaPesquisa";

                SqlParameter[] parameters =                
                { 
                   new SqlParameter("@string", Descricao),
                   new SqlParameter("@int", Codigo)

                };
                using (SqlDataReader sqlDataReader = ExecuteReader(storedProssidere, parameters))
                {
                    while (sqlDataReader.Read())
                    {

                        DTOCategoria dtoCategoria = CriarCategoria(sqlDataReader);

                        lstCategorias.Add(dtoCategoria);

                    }
                }
            }
            catch (SqlException)
            {
                throw;
            }
            return lstCategorias;
        }

        public void Atualizar(DTOCategoria dtoCategoria)
        {
            try
            {
                string storedProssidere = "sp_AtualizarCategoria";
                SqlParameter[] parameters =

                        {                    
                           new SqlParameter("@categoriaID", dtoCategoria.CategoriaID),
                           new SqlParameter("@descricao", dtoCategoria.Descricao),  
                        };
                ExecuteNonQuery(storedProssidere, parameters);

            }

            catch (SqlException)
            {
                throw;
            }
        }

        public void Excluir(int categoriaID)
        {
            try
            {
                string storedProssidere = "sp_ExcluirCategoria";
                SqlParameter[] parameters =

                        {                    
                           new SqlParameter("@categoriaID", categoriaID)                                    
                        };
                ExecuteNonQuery(storedProssidere, parameters);

            }

            catch (SqlException)
            {
                throw;
            }
        }

        public bool VerificaSeCategoriaIDExiste(int categoriaID)
        {
            bool Existe = false;

            try
            {
                string storedProssidere = "sp_VerificaSeCategoriaIDExiste";

                SqlParameter[] parameters =
            {
                new SqlParameter("@categoriaID", categoriaID),                            
            };

                using (SqlDataReader sqlDataReader = ExecuteReader(storedProssidere, parameters))
                {
                    if (sqlDataReader.Read())
                    {
                        int NumReg = (int)sqlDataReader["NumeroRegistros"];
                        if (NumReg > 0)
                        {
                            Existe = true;
                        }

                    }
                }
                return Existe;

            }
            catch (Exception)
            {
                throw;
            }

        }

        public DTOCategoria BuscarDescicaoPorCategoriaID(int categoriaID)
        {
            DTOCategoria dtoCategoria = new DTOCategoria(); ;

            try
            {
                string storedProssidere = "sp_BuscarDescricaoPorCategoriaID";
                SqlParameter[] parameters =
                        {                    
                           new SqlParameter("@categoriaID", categoriaID)                                    
                        };
                using (SqlDataReader sqlDataReader = ExecuteReader(storedProssidere, parameters))
                {
                    if (sqlDataReader.Read())
                    {
                        dtoCategoria.Descricao = (string)sqlDataReader["Descricao"];
                    }
                }
            }
            catch (SqlException)
            {
                throw;
            }

            return dtoCategoria;
        }
    }
}
